import { prop, modelOptions } from '@typegoose/typegoose';
import { ApiProperty } from '@nestjs/swagger';
import { IsNotEmpty, IsOptional, IsUrl, IsNumber, Allow } from 'class-validator';

/**
 * Carousel 模型 - 轮播图模型
 */
@modelOptions({
  schemaOptions: {
    collection: 'carousel',
    timestamps: true,
  },
})
export class Carousel {
  /**
   * 分组
   */
  @ApiProperty({ description: '分组' })
  @IsNotEmpty({ message: '分组不能为空' })
  @prop()
  group: string;

  /**
   * 图片URL
   */
  @ApiProperty({ description: '图片URL' })
  @IsNotEmpty({ message: '图片URL不能为空' })
  @IsUrl({}, { message: '图片URL格式不正确' })
  @prop()
  imageUrl: string;

  /**
   * 链接
   */
  @ApiProperty({ description: '链接', required: false })
  @IsOptional()
  @IsUrl({}, { message: '链接格式不正确' })
  @prop()
  link?: string;

  /**
   * 标题
   */
  @ApiProperty({ description: '标题' })
  @IsOptional()
  @prop()
  title: string;

  /**
   * 副标题
   */
  @ApiProperty({ description: '副标题', required: false })
  @IsOptional()
  @prop()
  subtitle?: string;

  /**
   * 排序
   */
  @ApiProperty({ description: '排序', required: false, default: 0 })
  @IsOptional()
  @IsNumber({}, { message: '排序必须是数字' })
  @prop({ default: 0 })
  sort?: number;

  /**
   * 创建时间
   */
  @ApiProperty({ description: '创建时间' })
  @Allow()
  createdAt?: Date;

  /**
   * 更新时间
   */
  @ApiProperty({ description: '更新时间' })
  @Allow()
  updatedAt?: Date;
}